package io.gitee.xyuesheng.day06;

import org.junit.Assert;
import org.junit.Test;

import java.util.Stack;

public class TestStack {
    /**
     * 敲  /**  回车
     */
    @Test
    public void test() {
        Assert.assertTrue(isMatch("[]"));
        Assert.assertFalse(isMatch("[(])"));
    }

    /**
     * 括号匹配
     *
     * @param s-包含了各种括号的字符串（不用考虑其他字符）
     * @return-括号是否匹配
     */
    public boolean isMatch(String s) {
        Stack<Character> stack = new Stack<>();

        //遍历s里面的所有字符
        //如果是左括号，入栈
        //如果是右括号，判断当前括号是否与栈顶的括号匹配
        //不匹配。返回false
        //匹配，栈顶元素出栈

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            if (c == '{' || c == '[' || c == '(') {
                stack.push(c);
            } else {
                char top = stack.pop();
                if (!isMatch(top, c)) {
                    return false;
                }
            }
        }
        return stack.isEmpty() ? true : false;
    }

    //判断括号是否匹配
    private boolean isMatch(char c1, char c2) {
        if (c1 == '{') {
            return c2 == '}';
        }

        if (c1 == '[') {
            return c2 == ']';
        }

        if (c1 == '(') {
            return c2 == ')';
        }

        return false;
    }

}
